package com.dycong.common.leetcode.yi;

import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * 根据每日 气温 列表，请重新生成一个列表，对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高，请在该位置用 0 来代替。
 * <p>
 * 例如，给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]，你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
 * <p>
 * 提示：气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度，都是在 [30, 100] 范围内的整数。
 * <p>
 * User: yilin
 * Date: 2019-07-29
 * Time: 16:38
 * sulution: 采用逆向遍历+递减的栈，因为如果正向遍历，你根本就不知道你前面有多少数据
 */
public class DailyTemplature {

    public int[] dailyTemperatures(int[] T) {
        int[] res = new int[T.length];
        // 单调栈 里面的数 非递增排序
        Stack<Integer> stack = new Stack();
        for (int i = T.length - 1; i >= 0; i--) {
            while (!stack.isEmpty() && T[i] >= T[stack.peek()]) {
                stack.pop();
            }
            res[i] = stack.isEmpty() ? 0 : stack.peek() - i;
            stack.push(i);
        }

        return res;
    }

    public static void main(String[] args) {

        System.out.println(nextGreatestLetter(new char[]{'c', 'f', 'j'}, 'd'));

    }


    public static char nextGreatestLetter(char[] letters, char target) {
        int left = 0;
        int right = letters.length - 1;
        if (target >= letters[right]) {
            return letters[0];
        }
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (target >= letters[mid]) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return letters[right];

    }

}
